<?php
class Instituciones_Model_Normasies extends Model_Cna {
    private $normasiesTable;

    public function __construct() {
        parent::__construct();
        $this->normasiesTable = new Instituciones_Model_DbTable_Normasies();
    }
	/**
	 * Almacena los datos de las normas de la IES
	 * @param array $datos Los datos de la norma
	 */
    public function guardarNorma($datos) {
        if(isset($datos["codnorma"]) && ! empty($datos["codnorma"])) {
            $row = $this->normasiesTable->find($datos["codnorma"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["codnorma"]);
            $key = $this->normasiesTable->createRow($datos)->save();
            return $key;
        }
    }
	/**
	 * Obtiene la lista de normas de una IES
	 * @param $codnormainterna Código de la norma interna
	 * @return array
	 */
    public function getSelectFetchAll($codnormainterna,$codinstitucion) {
        return $this->normasiesTable->getSelectFetchAll($codnormainterna,$codinstitucion);
    }
	/**
	 * Carga los datos de una norma
	 * @param $codnormainterna Código de la norma interna
	 * @return Array con los datos de la norma
	 */
    public function cargarUltimaNorma($codnormainterna,$codinstitucion) {
        return $this->normasiesTable->cargarUltimaNorma($codnormainterna,$codinstitucion);
    }
	/**
	 * Carga los datos de una norma
	 * @param $codnorma Código de la norma
	 * @return Array con los datos de la norma
	 */
    public function cargarNorma($codnorma) {
        return $this->normasiesTable->find($codnorma)->current()->toArray();
    }
	/**
	 * Elimina el registro de una norma
	 * @param $codnorma Código de la norma
	 * @return Boolean
	 */
    public function eliminarNorma($codnorma) {
        return $this->normasiesTable->delete("codnorma={$codnorma}");
    }
	/**
	 * Retorna el código de un archivo adjunto a una norma
	 * @param $codnorma Código de la norma
	 * @return $coddocumento Código del documento
	 */
	public function getcodigoAdjunto($codnorma,$tipo=1) {
		return $this->normasiesTable->getcodigoAdjunto($codnorma,$tipo);
		
	}
	/**
	 * Elimina el documento adjunto de una norma
	 * @param integer Código del documento
	 * @return bool
	 */
	public function eliminarAdjuntoNorma($coddocumento) {
		    $adjunto = new Generales_Model_Documentos();
		    $adjunto->eliminarDocumento($coddocumento);
	}
	/**
	 * Almacena los datos de un archivo adjunto a una noram
	 * @param array $datos Los datos para el registro
	 */
	public function guardarAdjuntoNorma($datos) {
		$adjuntoTable = new Generales_Model_DbTable_Documentos();
	    $adjuntoTable->getAdapter()->beginTransaction();
		try {
			$key = $adjuntoTable->createRow($datos)->save();
			$SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
			$datos_rel["coddocumento"] = $key;
			$datos_rel["codnorma"] = $datos["codnorma"];
			$datos_rel["tipodocumento"] = $datos["tipo"];
			$SolicitudTable->getAdapter()->insert("documentosnormas", $datos_rel);
			$adjuntoTable->getAdapter()->commit();
		} catch(Exception $e) {
			$adjuntoTable->getAdapter()->rollBack();
			throw $e;
		}
	}
	/**
	 * Retorna el código de un archivo adjunto a una norma
	 * @param $codnorma Código de la norma
	 * @return $coddocumento Código del documento
	 */
	public function getSelectAdjuntos ($codnorma,$tipo=1) {
		return $this->normasiesTable->getSelectAdjuntos($codnorma,$tipo);
		
	}
	
	/**
	 * Analiza y actualiza el estado de completitud de las normas de las ies y sus padres
	 * @param integer $codnorma
	 */
	public function actualizarCompletitud($codnorma) {
	    return $this->normasiesTable->actualizarCompletitud($codnorma);
	}
	
    public function isCompleto($codinstitucion, $codigo) {
		$cantidad = Zend_Db_Table::getDefaultAdapter()->fetchOne("SELECT COUNT(*) FROM completitud_ies_cna WHERE codinstitucion={$codinstitucion} AND codnormainterna='{$codigo}' AND completo='S' ");
		if ($cantidad >0) {
			return true;
		}
		return false;
		
	}
	/**
	 * Verifica la completitud de la información de la IES
	 * @param $codinstitucion
	 * @return Booleam
	 */
	public function VerificarCompletitud($codinstitucion){
	    $completo = true;
	    $ValoresDominios = new Generales_Model_ValoresDominios();
	    $estructuraInformacion = $ValoresDominios->cargarDatos("INFORMACION_IES");
        for ($index = 0; $index < count($estructuraInformacion); $index++) {
			if($estructuraInformacion[$index]["codpadre"]==null) {
			    $completo =$this->isCompleto($codinstitucion, $estructuraInformacion[$index]["codigo"]);
			}
		}
	    return $completo;
	}
	/**
	 * Ajusta la completitud
	 * @param $codinstitucion
	 */
	public function AjustarCompletitud($codinstitucion) {
	    $array_codigos = array("2_6_1","2_6");
	    foreach ($array_codigos as $codigo) {
            if (!$this->isCompleto($codinstitucion, $codigo)){
                $this->normasiesTable->AjustarCompletitud($codinstitucion,$codigo);
            }
	    }
	}
}